Research
Security News
Threat Actor Exposes Playbook for Exploiting npm to Build Blockchain-Powered Botnets
A threat actor's playbook for exploiting the npm ecosystem was exposed on the dark web, detailing how to build a blockchain-powered botnet.
protoc-gen-ts
Advanced tools
Compile .proto
files to plain TypeScript. Supports gRPC Node and gRPC Web.
npm install -g protoc-gen-ts
protoc -I=sourcedir --ts_out=dist myproto.proto
syntax = "proto3";
message Author {
string name = 1;
string role = 2;
}
message Change {
Kind kind = 1;
string patch = 2;
repeated string tags = 3;
oneof name_or_id {
string name = 4;
string id = 5;
}
Author author = 6;
}
enum Kind {
UPDATED = 0;
DELETED = 1;
}
// Constructed message
const change = new Change({
kind: Kind.UPDATED,
patch: "@@ -7,11 +7,15 @@",
tags: ["no prefix", "as is"],
name: "patch for typescript 4.5",
author: new Author({
name: "mary poppins",
role: "maintainer"
})
});
// Sent over the wire
const bytes: Uint8Array = change.serialize();
const receivedChange: Change = Change.deserialize(bytes);
console.log(receivedChange.kind == Kind.UPDATED) // true
console.log(receivedChange.patch) // "@@ -7,11 +7,15 @@"
console.log(receivedChange.tags) // ["no prefix", "as is"]
console.log(receivedChange.name) // "patch for typescript 4.5"
// see which one of the fields were filled
console.log(receivedChange.name_or_id) // "name"
console.log(receivedChange.author.name) // "mary poppins"
When mapping raw json data to message classes, dealing with nested structures can be rather annoying.
To overcome this problem, every generated message class has a static method called fromObject
and toObject
which can handle the mapping bidirectionally for you, even with the deeply structured messages. since it is
aware of the field graph, it does not rely on any runtime type information thus we get the chance to keep it fast.
One can write code as;
const change = Change.fromObject({
kind: Kind.UPDATED,
patch: "@@ -7,11 +7,15 @@",
tags: ["no prefix", "as is"],
name: "patch for typescript 4.5",
author: {
name: "mary poppins",
role: "maintainer"
}
});
console.log(change.author instanceof Author) // true
@grpc/grpc-js
or grpc
There is a seperate documentation for the usage of protoc-gen-ts along with either @grpc/grpc-js
or grpc
. By default
this generated gRPC interfaces will use @grpc/grpc-js
.
Checkout rpcs.
d.ts
files. Just plain typescript sources with actual code.message.field_name
) or JSON-compatible names (message.fieldName
).With --ts_opt=unary_rpc_promise=true
, the service definition will contain a promise based rpc with a calling pattern of const result = await client.METHOD(message)
. Note: all of the metadata
and options
parameters are still available to you.
With --ts_opt=grpc_package=xxxx
, you can specify a different package to import rather than @grpc/grpc-js
.
With --ts_opt=no_namespace
, you can control whether you get nested messages inside namespaces or prefixed with their parent message or directive.
With --ts_opt=json_names
, fields will be converted to lowerCamelCase, for compatibility with the JSON mapping done by the first-party protobuf libraries.
With --ts_opt=explicit_override
, inherited methods are generated with override
modifier, this fixes transpilation error when noImplicitOverride
is enabled.
With --ts_opt=target=node
, the generated client class will be compatible with gRPC Node @grpc/grpc-js
or grpc
.
With --ts_opt=target=web
, the generated client class will be compatible with gRPC Web via grpc-web
.
With --ts_opt=no_grpc
, grpc service code won't be generated.
We need your constant support to keep protoc-gen-ts well maintained and add new features.
If your corporate has a OSS funding scheme, please consider supporting us monthly through open collective.
import
directive.Promise
in rpcs.map<TYPE, TYPE>
types as ES Map
.@deprecated
annotations via deprecated option.Plugin | google-protobuf | Typescript | Declarations | gRPC Node | gRPC Web | ES6 Support | Notes |
---|---|---|---|---|---|---|---|
thesayyn/protoc-gen-ts | Yes | Yes | Yes | Yes | Yes | Yes | |
improbable-eng/ts-protoc-gen | Yes | No | Yes | No | Yes | Partial | Drawback: You can't bundle generated files with rollup since they are not >= ES6 compatible. |
stephenh/ts-proto | No | Yes | Yes | No | No | Yes | There is no support for rpcs. See: https://github.com/stephenh/ts-proto/issues/2 |
Generates appropriate Protocol Buffer sources from Proto files directly through TypeScript Compiler API.
# when you make changes to the plugin, you will have to run the command below
yarn update_checked_in_test
# this command will run the plugin with your changes and update generated test source accordingly.
# then invoke the tests
yarn test
# additionally if you want to see error details
yarn test --test_output=errors
FAQs
Compile protocol buffers descriptors to Typescript.
The npm package protoc-gen-ts receives a total of 41,358 weekly downloads. As such, protoc-gen-ts popularity was classified as popular.
We found that protoc-gen-ts demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
A threat actor's playbook for exploiting the npm ecosystem was exposed on the dark web, detailing how to build a blockchain-powered botnet.
Security News
NVD’s backlog surpasses 20,000 CVEs as analysis slows and NIST announces new system updates to address ongoing delays.
Security News
Research
A malicious npm package disguised as a WhatsApp client is exploiting authentication flows with a remote kill switch to exfiltrate data and destroy files.